home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Resources / Online / Term / Extras / Source / term-source.lha / PrintPanel.c < prev    next >
C/C++ Source or Header  |  1996-10-20  |  6KB  |  304 lines

  1. /*
  2. **    PrintPanel.c
  3. **
  4. **    Control panel to set options for phonebook printing
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_FILE=1, GAD_PLAIN, GAD_USE, GAD_CANCEL, GAD_OPTION };
  17.  
  18. STATIC UBYTE    OutputFile[MAX_FILENAME_LENGTH] = "PRT:";
  19. STATIC ULONG    Flags = PRINT_SERIAL | PRINT_MODEM | PRINT_SCREEN | PRINT_TERMINAL | PRINT_USERNAME | PRINT_COMMENT;
  20. STATIC BOOL        Plain = FALSE;
  21.  
  22. VOID
  23. PrintPanel(struct Window *Window,struct List *PhoneList,LONG Count)
  24. {
  25.     LayoutHandle *Handle;
  26.     BOOL Result;
  27.  
  28.     Result = FALSE;
  29.  
  30.     if(Handle = LT_CreateHandleTags(Window->WScreen,
  31.         LAHN_LocaleHook,    &LocaleHook,
  32.     TAG_DONE))
  33.     {
  34.         struct Window *PanelWindow;
  35.         BYTE Storage[6];
  36.  
  37.         LT_New(Handle,
  38.             LA_Type,    VERTICAL_KIND,
  39.         TAG_DONE);
  40.         {
  41.             LT_New(Handle,
  42.                 LA_Type,    HORIZONTAL_KIND,
  43.                 LA_LabelID,    MSG_V36_0152,
  44.             TAG_DONE);
  45.             {
  46.                 LT_New(Handle,
  47.                     LA_Type,    VERTICAL_KIND,
  48.                 TAG_DONE);
  49.                 {
  50.                     LONG i;
  51.  
  52.                     for(i = 0 ; i < 6 ; i++)
  53.                     {
  54.                         if(i == 3)
  55.                         {
  56.                             LT_EndGroup(Handle);
  57.  
  58.                             LT_New(Handle,
  59.                                 LA_Type,VERTICAL_KIND,
  60.                             TAG_DONE);
  61.                         }
  62.  
  63.                         if(Flags & (1L << i))
  64.                             Storage[i] = TRUE;
  65.                         else
  66.                             Storage[i] = FALSE;
  67.  
  68.                         LT_New(Handle,
  69.                             LA_Type,    CHECKBOX_KIND,
  70.                             LA_LabelID,    MSG_PRINTPANEL_INCLUDE_SERIAL_GAD + i,
  71.                             LA_ID,        GAD_OPTION + i,
  72.                             LA_BYTE,    &Storage[i],
  73.                         TAG_DONE);
  74.                     }
  75.  
  76.                     LT_EndGroup(Handle);
  77.                 }
  78.  
  79.                 LT_EndGroup(Handle);
  80.             }
  81.  
  82.             LT_New(Handle,
  83.                 LA_Type,    VERTICAL_KIND,
  84.                 LA_LabelID,    MSG_V36_0153,
  85.             TAG_DONE);
  86.             {
  87.                 LT_New(Handle,
  88.                     LA_Type,        STRING_KIND,
  89.                     LA_LabelID,        MSG_PRINTPANEL_OUTPUT_FILE_OR_DEVICE_GAD,
  90.                     LA_ID,            GAD_FILE,
  91.                     LA_STRPTR,        OutputFile,
  92.                     LA_Chars,        30,
  93.                     LAST_Picker,    TRUE,
  94.                     GTST_MaxChars,    sizeof(OutputFile) - 1,
  95.                 TAG_DONE);
  96.  
  97.                 LT_New(Handle,
  98.                     LA_Type,        CHECKBOX_KIND,
  99.                     LA_LabelID,        MSG_PRINTPANEL_PLAIN_TEXT_GAD,
  100.                     LA_ID,            GAD_PLAIN,
  101.                     LA_BYTE,        &Plain,
  102.                 TAG_DONE);
  103.  
  104.                 LT_EndGroup(Handle);
  105.             }
  106.  
  107.             LT_New(Handle,
  108.                 LA_Type,VERTICAL_KIND,
  109.             TAG_DONE);
  110.             {
  111.                 LT_New(Handle,
  112.                     LA_Type,        XBAR_KIND,
  113.                     LAXB_FullSize,    TRUE,
  114.                 TAG_DONE);
  115.  
  116.                 LT_EndGroup(Handle);
  117.             }
  118.  
  119.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  120.                 LAGR_SameSize,    TRUE,
  121.                 LAGR_Spread,    TRUE,
  122.             TAG_DONE);
  123.             {
  124.                 LT_New(Handle,
  125.                     LA_Type,        BUTTON_KIND,
  126.                     LA_LabelID,        MSG_GLOBAL_USE_GAD,
  127.                     LA_ID,            GAD_USE,
  128.                     LABT_ReturnKey,    TRUE,
  129.                     LABT_ExtraFat,    TRUE,
  130.                 TAG_DONE);
  131.  
  132.                 LT_New(Handle,
  133.                     LA_Type,        BUTTON_KIND,
  134.                     LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  135.                     LA_ID,            GAD_CANCEL,
  136.                     LABT_EscKey,    TRUE,
  137.                     LABT_ExtraFat,    TRUE,
  138.                 TAG_DONE);
  139.  
  140.                 LT_EndGroup(Handle);
  141.             }
  142.  
  143.             LT_EndGroup(Handle);
  144.         }
  145.  
  146.         if(PanelWindow = LT_Build(Handle,
  147.             LAWN_TitleID,        MSG_PRINTPANEL_OUTPUT_OPTIONS_TXT,
  148.             LAWN_HelpHook,        &GuideHook,
  149.             LAWN_Parent,        Window,
  150.             WA_DepthGadget,        TRUE,
  151.             WA_DragBar,            TRUE,
  152.             WA_RMBTrap,            TRUE,
  153.             WA_Activate,        TRUE,
  154.             WA_SimpleRefresh,    TRUE,
  155.         TAG_DONE))
  156.         {
  157.             struct IntuiMessage    *Message;
  158.             struct Gadget *MsgGadget;
  159.             ULONG MsgClass;
  160.             BOOL Done;
  161.  
  162.             GuideContext(CONTEXT_PRINT);
  163.  
  164.             PushWindow(PanelWindow);
  165.  
  166.             Done = FALSE;
  167.  
  168.             do
  169.             {
  170.                 if(Wait(PORTMASK(PanelWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
  171.                     break;
  172.  
  173.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  174.                 {
  175.                     MsgClass    = Message->Class;
  176.                     MsgGadget    = (struct Gadget *)Message->IAddress;
  177.  
  178.                     LT_ReplyIMsg(Message);
  179.  
  180.                     if(MsgClass == IDCMP_IDCMPUPDATE && MsgGadget->GadgetID == GAD_FILE)
  181.                     {
  182.                         UBYTE DummyBuffer[MAX_FILENAME_LENGTH];
  183.                         struct FileRequester *FileRequest;
  184.  
  185.                         strcpy(DummyBuffer,OutputFile);
  186.  
  187.                         if(*FilePart(DummyBuffer) == 0)
  188.                             strcpy(DummyBuffer,LocaleString(MSG_PRINTPANEL_FILENAME_TXT));
  189.  
  190.                         if(FileRequest = SaveFile(PanelWindow,LocaleString(MSG_PRINTPANEL_SELECT_OUTPUT_FILE_TXT),LocaleString(MSG_GLOBAL_SELECT_TXT),NULL,DummyBuffer,sizeof(DummyBuffer)))
  191.                         {
  192.                             FreeAslRequest(FileRequest);
  193.  
  194.                             LT_SetAttributes(Handle,GAD_FILE,
  195.                                 GTST_String,DummyBuffer,
  196.                             TAG_DONE);
  197.                         }
  198.                     }
  199.  
  200.                     if(MsgClass == IDCMP_GADGETUP)
  201.                     {
  202.                         LONG i;
  203.  
  204.                         switch(MsgGadget->GadgetID)
  205.                         {
  206.                             case GAD_USE:
  207.  
  208.                                 LT_UpdateStrings(Handle);
  209.  
  210.                                 Flags = NULL;
  211.  
  212.                                 for(i = 0 ; i < 6 ; i++)
  213.                                 {
  214.                                     if(Storage[i])
  215.                                         Flags |= (1L << i);
  216.                                 }
  217.  
  218.                                 Result = Done = TRUE;
  219.                                 break;
  220.  
  221.                             case GAD_CANCEL:
  222.  
  223.                                 Done = TRUE;
  224.                                 break;
  225.                         }
  226.                     }
  227.                 }
  228.             }
  229.             while(!Done);
  230.  
  231.             PopWindow();
  232.         }
  233.  
  234.         LT_DeleteHandle(Handle);
  235.     }
  236.  
  237.     if(Result)
  238.     {
  239.         LONG Error = 0;
  240.         BPTR File;
  241.  
  242.         if(File = Open(OutputFile,MODE_NEWFILE))
  243.         {
  244.             struct Window *ReqWindow;
  245.             struct EasyStruct  Easy;
  246.  
  247.             Easy.es_StructSize        = sizeof(struct EasyStruct);
  248.             Easy.es_Flags            = NULL;
  249.             Easy.es_Title            = (UBYTE *)LocaleString(MSG_TERMAUX_TERM_REQUEST_TXT);
  250.             Easy.es_GadgetFormat    = (UBYTE *)LocaleString(MSG_PRINT_STOP_TXT);
  251.             Easy.es_TextFormat        = (UBYTE *)LocaleString(MSG_PRINT_PRINTING_PHONEBOOK_TXT);
  252.  
  253.             if(ReqWindow = BuildEasyRequest(Window,&Easy,NULL))
  254.             {
  255.                 struct PhoneNode *TempNode;
  256.                 BOOL Continue;
  257.  
  258.                 Continue = TRUE;
  259.  
  260.                 if(Count > 0)
  261.                 {
  262.                     for(TempNode = (struct PhoneNode *)PhoneList->lh_Head ; Continue && TempNode->Node.ln_Succ ; TempNode = (struct PhoneNode *)TempNode->Node.ln_Succ)
  263.                     {
  264.                         if(TempNode->Entry->Count >= 0)
  265.                             Continue = PrintEntry(File,ReqWindow,Plain,&Error,TempNode->Entry,Flags);
  266.                     }
  267.                 }
  268.                 else
  269.                 {
  270.                     for(TempNode = (struct PhoneNode *)PhoneList->lh_Head ; Continue && TempNode->Node.ln_Succ ; TempNode = (struct PhoneNode *)TempNode->Node.ln_Succ)
  271.                         Continue = PrintEntry(File,ReqWindow,Plain,&Error,TempNode->Entry,Flags);
  272.                 }
  273.  
  274.                 FreeSysRequest(ReqWindow);
  275.             }
  276.  
  277.             Close(File);
  278.  
  279.             if(PathPart(OutputFile) != OutputFile)
  280.             {
  281.                 AddProtection(OutputFile,FIBF_EXECUTE);
  282.  
  283.                 if(Config->MiscConfig->CreateIcons)
  284.                     AddIcon(OutputFile,FILETYPE_TEXT,TRUE);
  285.             }
  286.         }
  287.         else
  288.             Error = IoErr();
  289.  
  290.         if(Error)
  291.         {
  292.             UBYTE LocalBuffer[256];
  293.             STRPTR ErrorString;
  294.  
  295.             if(Fault(Error,NULL,LocalBuffer,sizeof(LocalBuffer)))
  296.                 ErrorString = LocalBuffer;
  297.             else
  298.                 ErrorString = "???";
  299.  
  300.             ShowRequest(Window,LocaleString(MSG_PRINT_ERROR_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),Error,ErrorString);
  301.         }
  302.     }
  303. }
  304.